﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Proyecto7CAD;
using Proyecto7CAD.Properties;
using System.Configuration;
using System.Data;
using System.Data.Sql;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Collections;

namespace ENProyecto7
{
    public class ENObjeto
    {
        // declaraciones de las variables
        private int idObjeto;
        private string nombreObjeto;
        private int tipoObjeto;
        private int ataqueObjeto;
        private int defensaObjeto;
        private int curacionObjeto;
        private int precioObjeto;
        private string descripcionObjeto;
        private string imagenObjeto;

        //SqlConnection conexion = new SqlConnection(Settings.Default.BDProyecto7ConnectionString);

        // constructor
        public ENObjeto(int newIdObjeto, string newNombreOjeto, int newTipoObjeto,
            int newAtaqueObjeto, int newDefensaObjeto, int newCuracionObjeto, int newPrecioObjeto = 0,
            string newDescripcionObjeto = "", string newImagenObjeto = "")
        {
            idObjeto = newIdObjeto;
            nombreObjeto = newNombreOjeto;
            tipoObjeto = newTipoObjeto;
            ataqueObjeto = newAtaqueObjeto;
            defensaObjeto = newDefensaObjeto;
            curacionObjeto = newCuracionObjeto;
            precioObjeto = newPrecioObjeto;
            descripcionObjeto = newDescripcionObjeto;
            imagenObjeto = newImagenObjeto;
        }
    
        public ENObjeto()
        {
            ataqueObjeto = 0;
            defensaObjeto = 0;
            curacionObjeto = 0;
            precioObjeto = 0;
            descripcionObjeto = null;
            imagenObjeto = null;
        }

        // get's y set's
        public int IdObjeto
        {
            get { return idObjeto; }
            set { idObjeto = value; }
        }
        public string NombreObjeto
        {
            get { return nombreObjeto; }
            set { nombreObjeto = value; }
        }
        public int TipoObjeto
        {
            get { return tipoObjeto; }
            set { tipoObjeto = value; }
        }
        public int AtaqueObjeto
        {
            get { return ataqueObjeto; }
            set { ataqueObjeto = value; }
        }
        public int DefensaObjeto
        {
            get { return defensaObjeto; }
            set { defensaObjeto = value; }
        }
        public int CuracionObjeto
        {
            get { return curacionObjeto; }
            set { curacionObjeto = value; }
        }
        public int PrecioObjeto
        {
            get { return precioObjeto; }
            set { precioObjeto = value; }
        }
        public string DescripcionObjeto
        {
            get { return descripcionObjeto; }
            set { descripcionObjeto = value; }
        }
        public string ImagenObjeto
        {
            get { return imagenObjeto; }
            set { imagenObjeto = value; }
        }
    
        //metodos de la clase

        // inserta un nuevo objeto en la BD
        public void insertarObjeto() 
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                objCAD.insertarObjetoCAD(nombreObjeto, tipoObjeto, ataqueObjeto, defensaObjeto, curacionObjeto, precioObjeto, descripcionObjeto, imagenObjeto);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void editarObjeto(int id) 
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                objCAD.editarObjetoCAD(id, nombreObjeto, tipoObjeto, ataqueObjeto, defensaObjeto, curacionObjeto, precioObjeto, descripcionObjeto, imagenObjeto);
            }
            catch (Exception ex) 
            {
                throw ex;
            }



        }

        // borra un objeto
        public void borrarObjeto(int id) {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                objCAD.borrarObjetoCAD(id);

            }
            catch (Exception ex) 
            {
                throw ex;
            }
        }

        // obtiene todos los objetos
        public DataSet obtenerObjetos() 
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                return objCAD.obtenerObjetosCAD();
            }
            catch (Exception ex) 
            {
                throw ex;
            }
        }

        public void obtenerObjeto(int id) 
        {
            try
            {

                DataSet bd = new DataSet();
                ObjetoCAD objCAD = new ObjetoCAD();
                bd = objCAD.obtenerObjetoCAD(id);


                ENObjeto objeto = new ENObjeto();
                foreach (DataRow fila in bd.Tables["objeto"].Rows)
                {
                    NombreObjeto = fila[1].ToString();
                    TipoObjeto = int.Parse(fila[2].ToString());
                    if (int.Parse(fila[3].ToString()) != 0)
                    {
                        AtaqueObjeto = int.Parse(fila[3].ToString());
                        DefensaObjeto = 0;
                        CuracionObjeto = 0;
                    }
                    else if (int.Parse(fila[4].ToString()) != 0)
                    {
                        AtaqueObjeto = 0;
                        DefensaObjeto = int.Parse(fila[4].ToString());
                        CuracionObjeto = 0;
                    }
                    else if (int.Parse(fila[5].ToString()) != 0)
                    {
                        AtaqueObjeto = 0;
                        DefensaObjeto = 0;
                        CuracionObjeto = int.Parse(fila[5].ToString());
                    }
                    PrecioObjeto = int.Parse(fila[6].ToString());
                    DescripcionObjeto = fila[7].ToString();
                    ImagenObjeto = fila[8].ToString();
                }
                
            }
            catch (Exception ex) 
            {
                throw ex;
            }
        
        
        }

        // busca objetos
        public DataTable buscarObjetos(string filtro) 
        {
            try 
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                return objCAD.buscarObjetosCAD(filtro);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        // tramiento de tipo de objetos
        public void insertarTipo(string tipo) 
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                objCAD.insertarTipoCAD(tipo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void borrarTipo(int id)
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                objCAD.borrarTipoCAD(id);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable obtenerTipoObjetos()
        {
            try
            {
                ObjetoCAD objCAD = new ObjetoCAD();
                return objCAD.obtenerTipoObjetosCAD();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable obtenerObjetoNombre(string nombre, string nom_des)
        {
            try
            {
                ObjetoCAD obj = new ObjetoCAD();
                return obj.obtenerObjetoNombre(nombre, nom_des);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // Obtener el maximo ataque que da un objeto
        public int obtenerAtaqueMax(int id)
        {
            try
            {
                ObjetoCAD obj = new ObjetoCAD();
                return obj.obtenerMaxAtaque(id);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // Obtener la maximo defensa que da un objeto
        public int obtenerDefensaMax(int id)
        {
            try
            {
                ObjetoCAD obj = new ObjetoCAD();
                return obj.obtenerMaxDefensa(id);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // Utiliza una pocion, obtiene el maximo que se puede curar y le resta la cantidad
        public int usarPocion(int id)
        {
            try
            {
                ObjetoCAD obj = new ObjetoCAD();
                int aux = obj.obtenerMaxCuracion(id);
                if (aux > 0)
                {
                    obj.restarPocion(id, aux);
                }
                return aux;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
